package com.beta.elephant.constant;

import java.io.Serializable;

/**
 * Dubbo服务返回状态码定义
 */
public interface IRetCode extends Serializable {
    /**
     * <pre>
     * 具体状态码。
     * code定义: code为6位 例如 12 3 456 其中<b>12</b>为系统码 <b>3</b>为场景码 <b>456</b>为具体错误码
     * <b>系统码定义</b>：
     * 00  通用系统码，所用业务都能使用
     * 01  tiger-activity-common    [基础-配置数据错误码]
     * 02  tiger-notice             [基础-业务数据错误码]
     *
     * 11  tiger-platform-service   [业务-后台配置业务错误码]
     * 12  tiger-act-bigwheel       [业务-大转盘/奖品模块]
     * 13  tiger-act-gold-egg       [业务 - 砸金蛋/玩游戏]
     * 14  tiger-act-pwd            [业务 - 口令接龙/任务模块]
     * 15  tiger-act-fortual-life   [业务 - 财富人生/道具模块]
     *
     * <b>场景码定义</b>：
     * 0 正常场景
     * 1 业务异常场景，例如 参数异常，
     * 2 系统异常
     * 3 调用外部异常，例如：调用上海、其它第三方平台等，具体哪个系统，有错误码说明
     *
     * <b>错误码定义</b>：
     * 000 表示成功
     * 0xx 表示公共异常
     * 001 xx请求参数异常（参数不为空，参数格式不正确，参数长度不符合）
     * 002
     * ...
     * 1～9 xx 表示自定义业务异常
     * 9xx 系统类异常
     * 999 系统错误(例如网络超时，运行时内存溢出等，一般用于最外层 cache 触发返回)
     * 常见错误一览
     * 000000   正确
     * xx2999   系统异常
     * </pre>
     *
     * @return
     */
    String getCode();

    /**
     * 将状态码以int形式返回
     *
     * @return
     */
    default int getCodeInt() {
        try {
            return Integer.parseInt(getCode());
        } catch (Exception e) {
            return 2998;//转换异常
        }
    }

    /**
     * 状态码对应的具体的详细描述信息
     *
     * @return
     */
    String getMsg();
}
